package com.tedu.review.day02;

public class 类的创建过程 {
    public static void main(String[] args) {
        /*完成一次创建对象*/
        CountrySide cs=new CountrySide();
        /**
         * 类的创建过程（JVM虚拟机--内存创建流程:栈、堆、方法去）
         * 1.从程序入口，加载xxx.class文件，类对象存到方法区中【方法区：并行】
         * 2.如果发现，加载xxx.class文件中，存在static静态块，存入方法区，创建对象提前调用
         * 3.发现cs 引用，将这个引用转为地址值:0x000,存在栈内存【栈区：并行】
         * 4.发现new 对象（），给对象申请【随意】空间
         * 理解：宾馆，很多屋子  ！  前台服务员【引用】---来一个客人【new】，随便开个房
         * 5.类创建【实例化】执行步骤：先执行方法区：静态块--》执行普通代码块--》初始化
         * 6.给栈中成员变量地址进行指向，堆内存中随意开辟空间（初始值）【与栈内存地址一致】
         * 7.给栈中成员变量地址进行指向，堆内存中随意开辟空间（赋值）【与栈内存地址一致】
         *
         * 调用过程：
         * 1.栈：编译器自动分配，使用完毕自动释放
         * 2.一般由程序员分配释放，若程序员没有释放，Java程序自动进行垃圾回收
         *                                      GC垃圾回收
         * 3.全局区（静态区）：全局变量和静态变量在内存中存在在一起的
         *                  初始化的全局变量和静态变量存在在一起的
         *                  未初始化的全局变量和未初始化的静态变量在相邻的另一块区域
         *                  ---程序结束  释放
         * 4.常量池：存在方法区中   --程序结束     释放【JavaAPI  字符串】
         */
    }
}
/*测试类：类创建过程      一个.java文件，创建两个类 */
class CountrySide{
    /*代码块*/
    {
        System.out.println("请问厕所在那个科室：赵四");
    }
    /*静态代码块*/
    static{
        System.out.println("爹，我和小蒙的事以后你就别管了");
    }
    /*1.成员变量：变量，类中存在变量就是成员变量，可以由修饰符修饰*/
    private String name="赵四";
    private int age=56;
    /*2.构造器|构造方法|句柄：创建对象初始化*/
    public CountrySide(){
        name="刘能";
        System.out.println(name+"这车能看不能摸，但是可以往外说~");
    }
}